#include "gpio_op.h"

void gpio_config_fn(gpio_config_st *param)
{
    gpio_config_t gpio_init_struct = {0};

    //配置IO为通用IO
    esp_rom_gpio_pad_select_gpio(param->gpio_pin);

    gpio_init_struct.intr_type    = GPIO_INTR_DISABLE;          //不使用中断

    switch(param->gpio_mode)
    {
        case GPIO_MODE_OUT_GP_PP:
            gpio_init_struct.mode     = GPIO_MODE_OUTPUT;           //输出模式
            gpio_init_struct.pull_up_en   = GPIO_PULLDOWN_DISABLE;
            gpio_init_struct.pull_down_en = GPIO_PULLDOWN_DISABLE;
            break;
        case GPIO_MODE_OUT_GP_OD:
            gpio_init_struct.mode     = GPIO_MODE_OUTPUT_OD;        //输出模式   
            break;
        case GPIO_MODE_OUT_AF_PP:
            break;
        case GPIO_MODE_OUT_AF_OD:
            break;
        case GPIO_MODE_IN_ANALOG:
            break;
        case GPIO_MODE_IN_FLOATING:
            gpio_init_struct.mode         = GPIO_MODE_INPUT;
            gpio_init_struct.pull_up_en   = GPIO_PULLDOWN_DISABLE;
            gpio_init_struct.pull_down_en = GPIO_PULLDOWN_DISABLE;
            break;
        case GPIO_MODE_IN_PULL_UP:
            gpio_init_struct.mode         = GPIO_MODE_INPUT;            //输入模式
            gpio_init_struct.pull_up_en   = GPIO_PULLUP_ENABLE;         //使能上拉模式
            gpio_init_struct.pull_down_en = GPIO_PULLDOWN_DISABLE;      //失能下拉模式
            break;
        case GPIO_MODE_IN_PULL_DOWN:
            gpio_init_struct.mode         = GPIO_MODE_INPUT;
            gpio_init_struct.pull_up_en   = GPIO_PULLUP_DISABLE;
            gpio_init_struct.pull_down_en = GPIO_PULLDOWN_ENABLE;
            break;
        default:
            break;
    }

    gpio_init_struct.pin_bit_mask = (1ULL << param->gpio_pin);        //使用GPIO9输出寄存器

    //将以上参数配置到引脚
    gpio_config( &gpio_init_struct );
}

void gpio_set_bits_fn(uint8_t port, uint8_t pin)
{
    gpio_set_level(pin, 0);
}

void gpio_reset_bits_fn(uint8_t port, uint8_t pin)
{
    gpio_set_level(pin, 1);
}

